1 Biomass vs. traits

1.1 Biomass in monoculture vs. traits

First, the relationship between each species’ trait values and the species’ monoculture biomass.

adam.monocultures <- adam %>%
  filter(Ninitial == 1,
         Year == 200) %>%
  rename(monoculture.biomass = Biomass) %>%
  select(-Ninitial, -Stage, -Year, -Rep) %>%
  pivot_longer(c(-SpeciesID, -monoculture.biomass),
               names_to = "trait", 
               values_to = "trait.value")

ggplot(adam.monocultures) +
  geom_point(aes(x = trait.value,
                 y = monoculture.biomass,
                 color = SpeciesID)) +
  facet_grid(cols = vars(trait),
             scales = "free_x") +
  labs(x = "Trait value",
       y = "Monoculture biomass") +
  theme_bw() +
  theme(aspect.ratio = 1,
        legend.position = "none")

The same plot, within 3D space:

adam.monocultures.3D <- adam %>%
  filter(Ninitial == 1,
         Year == 200) %>%
  rename(B.mono = Biomass) %>%
  select(-Ninitial, -Stage, -Year, -Rep)

plot_ly(adam.monocultures.3D,
        x = ~pNi, 
        y = ~no3i,
        z = ~abmi,
        color = ~log(B.mono),
        mode = "markers",
        type = "scatter3d")

1.2 Biomass in mixture vs. traits

For Adam’s model, the patterns observed in the 32-species mixtures are similar to those seen in the 64-species mixture. Therefore, I omit the 64-species mixture from this analysis.

adam.communities <- adam %>%
  filter(Ninitial == 32,
         Year %in% c(100, 200)) %>%
  group_by(Stage, SpeciesID, abmi, no3i, pNi) %>%
  summarise(mean.biomass = mean(Biomass))

adam.communities <- adam.communities %>%
  pivot_longer(c(-Stage, -SpeciesID, -mean.biomass),
               names_to = "trait", 
               values_to = "trait.value")

ggplot(adam.communities) +
  geom_point(aes(x = trait.value,
                 y = mean.biomass,
                 color = SpeciesID)) +
  facet_grid(cols = vars(trait), 
             rows = vars(Stage),
             scales = "free_x") +
  labs(x = "Trait value",
       y = "Mean biomass in mixture") +
  theme_bw() +
  theme(aspect.ratio = 1,
        legend.position = "none")

adam.mixture.3D <- adam %>%
  filter(Ninitial == 32,
         Year == 200) %>%
  rename(mixture.biomass = Biomass) %>%
  filter(mixture.biomass > 0) %>%
  select(-Ninitial, -Stage, -Year, -Rep)

plot_ly(adam.mixture.3D,
        x = ~pNi, 
        y = ~no3i,
        z = ~abmi,
        color = ~log(mixture.biomass),
        mode = "markers",
        type = "scatter3d")

Mixture biomass is expressed as a log.


2 Competitive strength (32-species mixtures)

2.1 Change in biomass from monoculture to mixture vs. traits

It may also be interesting to observe how species’ biomass production changes from when in monoculture to when it is incorporated into a community. Therefore, at the end of the isolation phase, I plot each species within 3D trait space, tying the color of each point to the average change in that species’ biomass, i.e. (community.biomass - monoculture.biomass) / monoculture.biomass.

adam.communities <- adam %>%
  filter(Ninitial == 32,
         Stage == "isolation") %>%
  group_by(Stage, SpeciesID, abmi, no3i, pNi) %>%
  summarise(mean.biomass = mean(Biomass))

adam.communities <- inner_join(adam.communities, adam.monocultures)

adam.communities <- adam.communities %>%
  mutate(delta.biomass = (mean.biomass - monoculture.biomass) / monoculture.biomass)

plot_ly(adam.communities,
        x = ~pNi, 
        y = ~no3i,
        z = ~abmi,
        color = ~delta.biomass,
        mode = "markers",
        type = "scatter3d")

There tends to be one a few dominant competitors with very high monoculture biomasses (abmi) that eliminate most of the other plants species, as well as a large number of significantly smaller species that have low aboveground tissue nitrogen concetrations (pNi) as well as low nitrogen R* (no3i). These smaller species suffer very little from competition within the community.

2.2 Average time to extinction vs. trait

adam.communities <- adam %>%
  filter(Ninitial == 32,
         Year > 5) # Because species begin the similation with biomass levels of 0

adam.communities <- adam.communities %>%
  group_by(SpeciesID, Rep) %>%
  arrange(Year) %>%
  mutate(isDead = (Biomass == 0)) %>%
  filter(isDead | (!isDead & Year == max(Year))) %>%
  filter(Year == first(Year))

adam.communities <- adam.communities %>%
  group_by(SpeciesID, abmi, no3i, pNi) %>%
  summarise(Year = mean(Year))

adam.communities <- adam.communities %>%
  pivot_longer(c(-SpeciesID, -Year),
               names_to = "trait",
               values_to = "trait.value")

ggplot(adam.communities) +
  geom_point(aes(x = trait.value,
                 y = Year,
                 color = SpeciesID)) +
  facet_grid(cols = vars(trait),
             scales = "free") +
  labs(x = "Trait value",
       y = "Time to extinction") +
  theme_bw() +
  theme(aspect.ratio = 1,
        legend.position = "none")

adam.communities <- adam %>%
  filter(Ninitial == 32,
         Year > 5) # Because species begin the similation with biomass levels of 0

adam.communities <- adam.communities %>%
  group_by(SpeciesID, Rep) %>%
  arrange(Year) %>%
  mutate(isDead = (Biomass == 0)) %>%
  filter(isDead | (!isDead & Year == max(Year))) %>%
  filter(Year == first(Year))

adam.communities <- adam.communities %>%
  group_by(SpeciesID, abmi, no3i, pNi) %>%
  summarise(t.extinction = mean(Year))

plot_ly(adam.communities,
        x = ~pNi, 
        y = ~no3i,
        z = ~abmi,
        color = ~t.extinction,
        mode = "markers",
        type = "scatter3d")